#pragma once
#include <string_view>
#include <type_traits>

namespace rft
{
    template <typename T>
    constexpr std::string_view get_static_name() {
        std::string_view name;

        if constexpr (std::is_convertible_v<T, std::string_view>) {
            name = "string";
        }
        else {
            const char* c_name = typeid(T).name();

            if constexpr (std::is_class_v<T>) {
            #ifdef _MSC_VER
                while (c_name && *c_name != ' ') ++c_name;
                ++c_name;
            #else
                while (c_name && isdigit(*c_name)) ++c_name;
            #endif
            }

            name = c_name;
        }

        return name;
    }
}